package com.offcn.bigdata.spark.p1

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Spark入门案例之WordCount
  */
object ScalaWordCountOps {
    def main(args: Array[String]): Unit = {
        /*
            master: 指的spark程序运行的方式
                local       ： spark程序基于本地模式运行，不依赖于集群本身
                    local       :  为当前的spark程序分配一个工作线程来执行
                    local[N]    :  为当前的spark程序分配N个工作线程来执行
                    local[*]    :  为当前的spark程序分配可用个个工作线程来执行
                    local[M, N] :  如果作业提交失败，会进行最多M次的尝试
                standalone  ：   基于spark集群自身来执行spark作业
                    client      ：sparkcontext在提交代码的机器上面创建
                    cluster     ：sparkcontext在spark集群，也就是worker中上面创建
                    spark://ip1:port1，比如spark://bigdata01:7077
                   ha的写法： spark://ip1:port1,ip2:port2 比如spark://bigdata01:7077,bigdata02:7077
                yarn        ： 基于yarn来执行spark程序
                    yarn-client ：sparkcontext在提交代码的机器上面创建
                    yarn-cluster： sparkcontext在yarn集群，也就是nodemanager中上面创建
         */
        val conf = new SparkConf()
                .setAppName(" ScalaWordCount")
                .setMaster("local[*]")
        val sc = new SparkContext(conf)

//        val lines = sc.textFile("hdfs://ns1/home/bigdata/hello.log")//读取hdfs
        val lines = sc.textFile("file:/E:/data/spark/hello.txt")//读取本地
        println("lines' partition size: " + lines.getNumPartitions)
        val words = lines.flatMap(_.split("\\s+"))
        val ret = words.map((_, 1)).reduceByKey(_+_)

        ret.foreach(println)
        sc.stop()
    }
}
